package br.com.sgac.client;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;


import br.com.sgac.dao.AgendaDAO;
import br.com.sgac.dao.FuncionalidadeDAO;
import br.com.sgac.dao.FuncionarioDAO;
import br.com.sgac.dao.MedicoDAO;
import br.com.sgac.dao.PacienteDAO;
import br.com.sgac.dao.PerfilDAO;
import br.com.sgac.dao.UsuarioDAO;
import br.com.sgac.model.Agenda;
import br.com.sgac.model.Consulta;
import br.com.sgac.model.Funcionalidade;
import br.com.sgac.model.Funcionario;
import br.com.sgac.model.Medico;
import br.com.sgac.model.Paciente;
import br.com.sgac.model.Pagamento;
import br.com.sgac.model.Perfil;
import br.com.sgac.model.Usuario;

public class Aplicacao1 {

	public Aplicacao1(){
		
	}
	
	public static void cadastrarFuncionalidadePerfil(){
		
		FuncionalidadeDAO funcionalidadeDAO = new FuncionalidadeDAO();
		PerfilDAO perfilDAO = new PerfilDAO();
		
		Funcionalidade funcionalidadeCadastrar = new Funcionalidade();
		Funcionalidade funcionalidade1 = new Funcionalidade();
		Funcionalidade funcionalidade2 = new Funcionalidade();
		Funcionalidade funcionalidade3 = new Funcionalidade();
		Funcionalidade funcionalidade4 = new Funcionalidade();
		Funcionalidade funcionalidade5 = new Funcionalidade();
		Funcionalidade funcionalidade6 = new Funcionalidade();
		Funcionalidade funcionalidadeEditar = new Funcionalidade();
		
		System.out.println("=========== Criando Funcionalidades =========");
		
		funcionalidadeCadastrar.setDescricaoFuncionalidade("Cadastro");
		funcionalidadeEditar.setDescricaoFuncionalidade("Editar");
				
		funcionalidade1.setDescricaoFuncionalidade("Cadastro de Perfils");
		funcionalidade1.setPagina("PerfilServlet");
		funcionalidade2.setDescricaoFuncionalidade("Cadastro de Pacientes");
		funcionalidade2.setPagina("PacienteServlet");
		funcionalidade3.setDescricaoFuncionalidade("Cadastro de Usuario");
		funcionalidade3.setPagina("UsuarioServlet");
		funcionalidade4.setDescricaoFuncionalidade("Cadastro de Funcionalidades");
		funcionalidade4.setPagina("FuncionalidadeServlet");
		
		funcionalidade5.setDescricaoFuncionalidade("Marcar Consulta");
		funcionalidade5.setPagina("AgendaServlet?acao=");
		funcionalidade6.setDescricaoFuncionalidade("Visualizar Agenda");
		funcionalidade6.setPagina("AgendaServlet?acao=Agenda");
		
		funcionalidadeEditar.addFuncionalidade(funcionalidade5);
		funcionalidadeEditar.addFuncionalidade(funcionalidade6);
		
		funcionalidadeCadastrar.addFuncionalidade(funcionalidade1);
		funcionalidadeCadastrar.addFuncionalidade(funcionalidade2);
		funcionalidadeCadastrar.addFuncionalidade(funcionalidade3);
		funcionalidadeCadastrar.addFuncionalidade(funcionalidade4);
		
		funcionalidadeDAO.begin();
		funcionalidadeDAO.persist(funcionalidadeCadastrar);
		funcionalidadeDAO.persist(funcionalidadeEditar);
		funcionalidadeDAO.commit();
		funcionalidadeDAO.close();
		
		System.out.println("=========== Funcionalidades Criadas =========");
		
		System.out.println(funcionalidadeCadastrar.toString());
		System.out.println(funcionalidadeEditar.toString());
		
		System.out.println("=========== Criando Perfis =========");

		
		Perfil perfilAdmin = new Perfil();
		Perfil perfilSecretaria = new Perfil();
		
		funcionalidade1 = (Funcionalidade) funcionalidadeDAO.findByQuery("select f from Funcionalidade f where f.descricaoFuncionalidade = 'Editar'");
		funcionalidade2 = (Funcionalidade) funcionalidadeDAO.findByQuery("select f from Funcionalidade f where f.descricaoFuncionalidade = 'Cadastro'");
		
				
		perfilAdmin.setNome("Admin");
		perfilAdmin.setFuncionalidades(funcionalidade1);
		perfilAdmin.setFuncionalidades(funcionalidade2);
		
		perfilSecretaria.setNome("Secretaria");
		perfilSecretaria.setFuncionalidades(funcionalidade2);
		
		perfilDAO.begin();
		perfilDAO.persist(perfilAdmin);
		perfilDAO.persist(perfilSecretaria);
		perfilDAO.commit();
		perfilDAO.close();
		
		System.out.println("=========== Perfis Criados =========");
		System.out.println(perfilAdmin.toString());
		System.out.println(perfilSecretaria.toString());
	}
	
	public static void cadastrarUsuario() {
		UsuarioDAO usuarioDAO = new UsuarioDAO();
		PerfilDAO perfilDAO = new PerfilDAO();
		
		System.out.println("=========== Criando Usuarios =========");
		
		Perfil perfilAdmin = (Perfil) perfilDAO.findByQuery("select p from Perfil p where p.nome='Admin'");
		Perfil perfilSecretaria = (Perfil) perfilDAO.findByQuery("select p from Perfil p where p.nome='Secretaria'");
				
		Usuario usuarioAdmin = new Usuario();
		Usuario usuarioSecretaria = new Usuario();
		
		usuarioAdmin.setLogin("Admin");
		usuarioAdmin.setSenha("1234");
		usuarioAdmin.setPerfil(perfilAdmin);
		usuarioAdmin.setDataCadastro(Calendar.getInstance());
		usuarioSecretaria.setLogin("Secretaria");
		usuarioSecretaria.setSenha("12345");
		usuarioSecretaria.setPerfil(perfilSecretaria);
		usuarioSecretaria.setDataCadastro(Calendar.getInstance());
		
		usuarioDAO.begin();
		usuarioDAO.persist(usuarioAdmin);
		usuarioDAO.persist(usuarioSecretaria);
		usuarioDAO.commit();
		usuarioDAO.close();
		
		System.out.println("=========== Usuarios Criados =========");
		System.out.println(usuarioAdmin.toString());
		System.out.println(usuarioSecretaria.toString());
	}
	
	public static void cadastrarFuncionario() {
		System.out.println("=========== Criando Funcionarios =========");
		
	
		FuncionarioDAO funcionarioDAO = new FuncionarioDAO();
		
		Usuario usuarioAdmin = (Usuario) funcionarioDAO.findByQuery("select u from Usuario u where u.login = 'Admin'");
		Usuario usuarioSecretaria = (Usuario) funcionarioDAO.findByQuery("select u from Usuario u where u.login = 'Secretaria'");
		
		Funcionario funcionarioAdmin = new Funcionario();
		Funcionario funcionarioSecretaria = new Funcionario();
		
		funcionarioAdmin.setUsuario(usuarioAdmin);
		funcionarioAdmin.setNome("Administrador");
		funcionarioAdmin.setCargo("Admin");
		funcionarioAdmin.setEmail("admin@gmail.com");
		funcionarioAdmin.setEstadoCivil("Solteiro");
		funcionarioAdmin.setMatricula("24491213");
		funcionarioAdmin.setCpf("1548764541");
		funcionarioAdmin.setCelular("4534748");
		funcionarioAdmin.setRg("14548216");
		funcionarioAdmin.setSexo("Masculino");
		funcionarioAdmin.setTelefone("659152");
		
		funcionarioSecretaria.setUsuario(usuarioSecretaria);
		funcionarioSecretaria.setNome("Secretaria");
		funcionarioSecretaria.setCargo("Secretaria");
		funcionarioSecretaria.setEmail("seecretaria@gmail.com");
		funcionarioSecretaria.setEstadoCivil("Casada");
		funcionarioSecretaria.setMatricula("12149613");
		funcionarioSecretaria.setCpf("32487823541");
		funcionarioSecretaria.setCelular("512856748");
		funcionarioSecretaria.setRg("985482146");
		funcionarioSecretaria.setSexo("Femenino");
		funcionarioSecretaria.setTelefone("483239152");
		
		
		funcionarioDAO.begin();
		funcionarioDAO.persist(funcionarioAdmin);
		funcionarioDAO.persist(funcionarioSecretaria);
		funcionarioDAO.commit();
		funcionarioDAO.close();
		
		System.out.println("=========== Funcionarios Criados =========");
		System.out.println(funcionarioAdmin.toString());
		System.out.println(funcionarioSecretaria.toString());
	}
	
	public static void cadastrarPaciente() {
		
		System.out.println("=========== Criando Pacientes =========");
		
		PacienteDAO pacienteDAO = new PacienteDAO();
		Paciente paciente1 = new Paciente();
		Paciente paciente2 = new Paciente();
		Paciente paciente3 = new Paciente();
		Paciente paciente4 = new Paciente();
		Paciente paciente5 = new Paciente();
		Paciente paciente6 = new Paciente();
		Paciente paciente7 = new Paciente();
		Paciente paciente8 = new Paciente();
		Paciente paciente9 = new Paciente();
		Paciente paciente10 = new Paciente();
		
		paciente1.setNome("Paciente 1");
		paciente1.setEmail("paciente1@gmail.com");
		paciente1.setEstadoCivil("Casada");
		paciente1.setGrupoSanguineo("A+");
		paciente1.setCpf("324878541");
		paciente1.setCelular("5856748");
		paciente1.setRg("9854846");
		paciente1.setSexo("Femenino");
		paciente1.setTelefone("489152");
		paciente1.setPacienteOcupacao("Tecnico em Informatica");
		paciente1.setMae("Mae Paciente 1");
		paciente1.setPai("Pai paciente 1");
		
		paciente2.setNome("Paciente2");
		paciente2.setEmail("paciente2@gmail.com");
		paciente2.setEstadoCivil("Casado");
		paciente2.setGrupoSanguineo("B+");
		paciente2.setCpf("3248718541");
		paciente2.setCelular("58256748");
		paciente2.setRg("98548346");
		paciente2.setSexo("Masculino");
		paciente2.setTelefone("4489152");
		paciente2.setPacienteOcupacao("Gerente de Projetos");
		paciente2.setMae("Mae Paciente 2");
		paciente2.setPai("Pai paciente 2");
		
		paciente3.setNome("Paciente3");
		paciente3.setEmail("paciente3@gmail.com");
		paciente3.setEstadoCivil("Solteiro");
		paciente3.setGrupoSanguineo("B-");
		paciente3.setCpf("328541");
		paciente3.setCelular("56748");
		paciente3.setRg("98548");
		paciente3.setSexo("Femenino");
		paciente3.setTelefone("14489152");
		paciente3.setPacienteOcupacao("Vagabundo");
		paciente3.setMae("Mae Paciente 3");
		paciente3.setPai("Pai paciente 3");
		
		paciente4.setNome("Paciente4");
		paciente4.setEmail("paciente4@gmail.com");
		paciente4.setEstadoCivil("Solteiro");
		paciente4.setGrupoSanguineo("O+");
		paciente4.setCpf("324871");
		paciente4.setCelular("556748");
		paciente4.setRg("98532446");
		paciente4.setSexo("Masculino");
		paciente4.setTelefone("452");
		paciente4.setPacienteOcupacao("Policial");
		paciente4.setMae("Mae Paciente 4");
		paciente4.setPai("Pai paciente 4");
		
		paciente5.setNome("Paciente5");
		paciente5.setEmail("paciente5@gmail.com");
		paciente5.setEstadoCivil("Solteiro");
		paciente5.setGrupoSanguineo("B+");
		paciente5.setCpf("32487162");
		paciente5.setCelular("5825988");
		paciente5.setRg("985401");
		paciente5.setSexo("Masculino");
		paciente5.setTelefone("189152");
		paciente5.setPacienteOcupacao("Dentista");
		paciente5.setMae("Mae Paciente 5");
		paciente5.setPai("Pai paciente 5");
		
		paciente6.setNome("Paciente6");
		paciente6.setEmail("paciente6@gmail.com");
		paciente6.setEstadoCivil("Casado");
		paciente6.setGrupoSanguineo("A-");
		paciente6.setCpf("328712");
		paciente6.setCelular("5848");
		paciente6.setRg("98546");
		paciente6.setSexo("Femenino");
		paciente6.setTelefone("98152");
		paciente6.setPacienteOcupacao("Flanelinha");
		paciente6.setMae("Mae Paciente 6");
		paciente6.setPai("Pai paciente 6");
		
		paciente7.setNome("Paciente7");
		paciente7.setEmail("paciente7@gmail.com");
		paciente7.setEstadoCivil("Casado");
		paciente7.setGrupoSanguineo("O-");
		paciente7.setCpf("111111111");
		paciente7.setCelular("222222");
		paciente7.setRg("333333");
		paciente7.setSexo("Femenino");
		paciente7.setTelefone("152");
		paciente7.setPacienteOcupacao("Engenheira");
		paciente7.setMae("Mae Paciente 7");
		paciente7.setPai("Pai paciente 7");
		
		paciente8.setNome("Paciente8");
		paciente8.setEmail("paciente8@gmail.com");
		paciente8.setEstadoCivil("Solteiro");
		paciente8.setGrupoSanguineo("B+");
		paciente8.setCpf("321241");
		paciente8.setCelular("5826348");
		paciente8.setRg("9854466");
		paciente8.setSexo("Masculino");
		paciente8.setTelefone("4489152");
		paciente8.setPacienteOcupacao("Advogado");
		paciente8.setMae("Mae Paciente 8");
		paciente8.setPai("Pai paciente 8");
		
		paciente9.setNome("Paciente9");
		paciente9.setEmail("paciente9@gmail.com");
		paciente9.setEstadoCivil("Solteiro");
		paciente9.setGrupoSanguineo("B-");
		paciente9.setCpf("32487");
		paciente9.setCelular("5748");
		paciente9.setRg("9846");
		paciente9.setSexo("Femenino");
		paciente9.setTelefone("9152");
		paciente9.setPacienteOcupacao("Alnalista de Informatica");
		paciente9.setMae("Mae Paciente 9");
		paciente9.setPai("Pai paciente 9");
		
		paciente10.setNome("Paciente10");
		paciente10.setEmail("paciente10@gmail.com");
		paciente10.setEstadoCivil("Casado");
		paciente10.setGrupoSanguineo("O+");
		paciente10.setCpf("38798");
		paciente10.setCelular("55636748");
		paciente10.setRg("9854884");
		paciente10.setSexo("Masculino");
		paciente10.setTelefone("454152");	
		paciente10.setPacienteOcupacao("Tecnico em Administracao");
		paciente10.setMae("Mae Paciente 10");
		paciente10.setPai("Pai paciente 10");
		
		pacienteDAO.begin();
		pacienteDAO.persist(paciente1);
		pacienteDAO.persist(paciente2);
		pacienteDAO.persist(paciente3);
		pacienteDAO.persist(paciente4);
		pacienteDAO.persist(paciente5);
		pacienteDAO.persist(paciente6);
		pacienteDAO.persist(paciente7);
		pacienteDAO.persist(paciente8);
		pacienteDAO.persist(paciente9);
		pacienteDAO.persist(paciente10);
		pacienteDAO.commit();
		pacienteDAO.close();
				
		
		System.out.println("=========== Pacientes Criados =========");
		System.out.println(paciente1.toString());
		System.out.println(paciente2.toString());
		System.out.println(paciente3.toString());
		System.out.println(paciente4.toString());
		System.out.println(paciente5.toString());
		System.out.println(paciente6.toString());
		System.out.println(paciente7.toString());
		System.out.println(paciente8.toString());
		System.out.println(paciente9.toString());
		System.out.println(paciente10.toString());
	}
	
public static void cadastroMedicos(){
		
		Medico medico = new Medico();
		Medico medico1 = new Medico();
		Medico medico2 = new Medico();
		
		medico.setNome("Dr. Antonio");
		medico.setCrm("1234-PB");
		medico.setEspecialidade("Cardiologista");
		medico.setCbo("2222");
		medico.setEmail("dr.antonio@gmai.com");
		medico.setCpf("121313");
		medico.setRg("423452");
		medico.setSexo("Masculino");
		medico.setGrupoSanguineo("O+");
		medico.setDataCadastro(Calendar.getInstance());
		medico1.setNome("Dra. Narla");
		medico1.setCrm("4321-PB");
		medico1.setEspecialidade("Nutricionista");
		medico1.setCbo("2221");
		medico1.setEmail("dra.narla@gmai.com");
		medico1.setCpf("12187");
		medico1.setRg("4230782");
		medico1.setGrupoSanguineo("O+");
		medico1.setSexo("Masculino");
		medico1.setDataCadastro(Calendar.getInstance());

		medico2.setNome("Dr. Joao de Deus");
		medico2.setCrm("4351-PB");
		medico2.setEspecialidade("Cardiologita");
		medico2.setCbo("2321");
		medico2.setEmail("dr.joao.deus@gmai.com");
		medico2.setCpf("1214533");
		medico2.setRg("423455752");
		medico2.setGrupoSanguineo("O+");
		medico2.setSexo("Masculino");
		medico2.setDataCadastro(Calendar.getInstance());
		
		MedicoDAO medicoDAO = new MedicoDAO();
		
		medicoDAO.begin();
		medicoDAO.persist(medico);
		medicoDAO.persist(medico1);
		medicoDAO.persist(medico2);
		medicoDAO.commit();
		medicoDAO.close();
		
		System.out.println("=========== Medicos Criados =========");
		System.out.println(medico.toString());
		System.out.println(medico1.toString());
		System.out.println(medico2.toString());
	}
	

	public static void cadastrarConsultaAgenda(){
		
		System.out.println("=========== Cadastrando Consulta em Agenda =========");
		
		Consulta consulta = new Consulta();
		Consulta consulta1 = new Consulta();
		Consulta consulta2 = new Consulta();
		Pagamento pagamento = new Pagamento();
		List<Consulta> consultas = new ArrayList<Consulta>();
		Paciente paciente = new Paciente();
		Paciente paciente1 = new Paciente();
		Paciente paciente2 = new Paciente();
		Calendar dataAgendamento = Calendar.getInstance();
		Agenda agenda = new Agenda();
		Medico medico = new Medico();
		
		AgendaDAO agendaDAO = new AgendaDAO();
		PacienteDAO pacienteDAO = new PacienteDAO();
		MedicoDAO medicoDAO = new MedicoDAO();
		
		
		medico = (Medico) medicoDAO.findByQuery("Select m from Medico m where m.nome = 'Dr. Antonio' ");
		paciente = (Paciente) pacienteDAO.findByQuery("Select p from Paciente p where p.nome = 'Paciente2'");
		paciente1 = (Paciente) pacienteDAO.findByQuery("Select p from Paciente p where p.nome = 'Paciente4'");
		paciente2 = (Paciente) pacienteDAO.findByQuery("Select p from Paciente p where p.nome = 'Paciente6'");
		consulta.setPaciente(paciente);
		consulta.setSituacao("Agendado");
		
		consulta1.setPaciente(paciente1);
		consulta1.setSituacao("Agendado");
		pagamento.setValorPago(10.50);
		pagamento.setFormaPagamento("Dinheiro");
		consulta1.addPagamento(pagamento);
		
		consulta2.setPaciente(paciente2);
		consulta2.setSituacao("Agendado");
		
		consultas.add(consulta);
		consultas.add(consulta1);
		consultas.add(consulta2);
		
		dataAgendamento.set(2011, 11, 23);
		
		
		agenda.setDataAgendamento(dataAgendamento);
		agenda.setConsultas(consultas);
		agenda.setMedico(medico);
		
		
		agendaDAO.begin();
		agendaDAO.merge(agenda);
		agendaDAO.commit();
		agendaDAO.close();
		
		System.out.println("=========== Consulta Cadastrada =========");
		System.out.println(agenda.toString());
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		cadastrarFuncionalidadePerfil();
		cadastrarUsuario();
		cadastrarFuncionario();
		cadastrarPaciente();
		cadastroMedicos();
		cadastrarConsultaAgenda();
	}

}
